<template>
  <div class="list-container">
    <div class="sortList clearfix">
      <div class="center">
        <!--banner轮播-->
        <div class="swiper-container banner-swiper" id="mySwiper">
          <!-- 轮播图 -->
          <div class="swiper-wrapper">
            <div
              class="swiper-slide"
              v-for="bannerItem in bannerList"
              :key="bannerItem.id"
            >
              <img :src="bannerItem.imgUrl" />
            </div>
            <!-- <div class="swiper-slide">
                                <img src="./images/banner1.jpg" />
                            </div>
            <div class="swiper-slide">
                                <img src="./images/banner2.jpg" />
                            </div>
                            <div class="swiper-slide">
                                <img src="./images/banner3.jpg" />
                            </div>
                            <div class="swiper-slide">
                                <img src="./images/banner4.jpg" />
                            </div> -->
          </div>
          <!-- 如果需要分页器 -->
          <div class="swiper-pagination"></div>

          <!-- 如果需要导航按钮 -->
          <div class="swiper-button-prev"></div>
          <div class="swiper-button-next"></div>
        </div>
      </div>
      <div class="right">
        <div class="news">
          <h4>
            <em class="fl">尚品汇快报</em>
            <span class="fr tip">更多 ></span>
          </h4>
          <div class="clearix"></div>
          <ul class="news-list unstyled">
            <li><span class="bold">[特惠]</span>备战开学季 全民半价购数码</li>
            <li><span class="bold">[公告]</span>备战开学季 全民半价购数码</li>
            <li><span class="bold">[特惠]</span>备战开学季 全民半价购数码</li>
            <li><span class="bold">[公告]</span>备战开学季 全民半价购数码</li>
            <li><span class="bold">[特惠]</span>备战开学季 全民半价购数码</li>
          </ul>
        </div>
        <ul class="lifeservices">
          <li class="life-item">
            <i class="list-item"></i>
            <span class="service-intro">话费</span>
          </li>
          <li class="life-item">
            <i class="list-item"></i>
            <span class="service-intro">机票</span>
          </li>
          <li class="life-item">
            <i class="list-item"></i>
            <span class="service-intro">电影票</span>
          </li>
          <li class="life-item">
            <i class="list-item"></i>
            <span class="service-intro">游戏</span>
          </li>
          <li class="life-item">
            <i class="list-item"></i>
            <span class="service-intro">彩票</span>
          </li>
          <li class="life-item">
            <i class="list-item"></i>
            <span class="service-intro">加油站</span>
          </li>
          <li class="life-item">
            <i class="list-item"></i>
            <span class="service-intro">酒店</span>
          </li>
          <li class="life-item">
            <i class="list-item"></i>
            <span class="service-intro">火车票</span>
          </li>
          <li class="life-item">
            <i class="list-item"></i>
            <span class="service-intro">众筹</span>
          </li>
          <li class="life-item">
            <i class="list-item"></i>
            <span class="service-intro">理财</span>
          </li>
          <li class="life-item">
            <i class="list-item"></i>
            <span class="service-intro">礼品卡</span>
          </li>
          <li class="life-item">
            <i class="list-item"></i>
            <span class="service-intro">白条</span>
          </li>
        </ul>
        <div class="ads">
          <img src="./images/ad1.png" />
        </div>
      </div>
    </div>
  </div>
</template>

<script>
import { mapState, mapActions } from "vuex";
import Swiper from "swiper";
import "swiper/css/swiper.min.css";
export default {
  name: "ListContainer",
  computed: {
    ...mapState("home", ["bannerList"]),
  },
  // methods:{
  //   ...mapActions('home',['addbannerlist']),
  // },
  mounted() {
    this.$store.dispatch("home/addbannerlist");
    // 这是第一种方法：
    // 优：写在计时器里，原因是mounted执行的时候，页面的DOM树已经加载完毕，但是图片等还不一定请求回来了，所以此时如果没有一个计时器，那么图片可能还未加载出来（具体要看服务器响应的速度）。那么加一个计时器，由于计时器是异步的，所以在延长的时间内，图片可能加载出来了，那么就可以使用swiper轮播功能了。
    // 缺：图片具体响应出来的时间不确定，所以不好控制延长计时器的时间。也是舍弃这种写法的原因。
    // setTimeout(() => {
    //   new Swiper('.banner-swiper', {
    //     slidesPerView: 1,
    //     spaceBetween: 30,
    //     loop: true,
    //     autoplay:true,
    //     pagination: {
    //       el: '.swiper-pagination',
    //       clickable: true,
    //     },
    //     navigation: {
    //       nextEl: '.swiper-button-next',
    //       prevEl: '.swiper-button-prev',
    //     },
    //   })
    // }, 1000)
  },
  //第二种写法原理：写在updated生命周期钩子函数中，updated函数的执行时机是，数据一旦发生更新，那么就会触发update，就相当于DOM树构建完毕，图片加载完毕，然后DOM树因为页面加载了图片，数据发生了改变，因为图片就是ajax请求回来的数据，此时就会触发这个update，那么就会执行swiper，这样功能实现。
  // 缺：由于一个页面可能会多次请求(刷新)，或者一些其他操作导致数据多次改变，那么会重复触发这个函数，导致会能耗增加。
  //  updated(){
  //       new Swiper('.banner-swiper', {
  //       slidesPerView: 1,
  //       spaceBetween: 30,
  //       loop: true,
  //       autoplay:true,
  //       pagination: {
  //         el: '.swiper-pagination',
  //         clickable: true,
  //       },
  //       navigation: {
  //         nextEl: '.swiper-button-next',
  //         prevEl: '.swiper-button-prev',
  //       },
  //     })
  //   },
  // 第三种写法原理（终极写法）：利用vue上的$nextTick方法，这个方法就是页面更新就会调用这个函数。以及监视属性，监视属性是监视一个已存在的属性，它的数据发生改变就会调用监视属性里的函数。DOM树创建完成，图片加载完成（触发监视属性），此时页面的DOM树又要重新创建，所以又会触发nextTick,此时执行swiper函数，有数据有图片，所以swiper函数执行成功。
  // 重点：Swiper(".banner-swiper")这个类名必须要是这个轮播图独有的，因为一个页面可能有多个轮播图，每个轮播图都必须单独写一个new Swiper()实例，来实现轮播功能。并且通过类名不一样来控制不同的轮播图。这个类名同时记得要加在轮播图的标签上
  watch: {
    bannerList: {
      handler() {
        this.$nextTick(() => {
          new Swiper(".banner-swiper", {
            slidesPerView: 1,
            spaceBetween: 30,
            loop: true,
            autoplay: true,
            pagination: {
              el: ".swiper-pagination",
              clickable: true,
            },
            navigation: {
              nextEl: ".swiper-button-next",
              prevEl: ".swiper-button-prev",
            },
          });
        });
      },
    },
  },
};
</script>
<style lang='less' scoped>
.list-container {
  width: 1200px;
  margin: 0 auto;

  .sortList {
    height: 464px;
    padding-left: 210px;

    .center {
      box-sizing: border-box;
      width: 740px;
      height: 100%;
      padding: 5px;
      float: left;
    }

    .right {
      float: left;
      width: 250px;

      .news {
        border: 1px solid #e4e4e4;
        margin-top: 5px;

        h4 {
          border-bottom: 1px solid #e4e4e4;
          padding: 5px 10px;
          margin: 5px 5px 0;
          line-height: 22px;
          overflow: hidden;
          font-size: 14px;

          .fl {
            float: left;
          }

          .fr {
            float: right;
            font-size: 12px;
            font-weight: 400;
          }
        }

        .news-list {
          padding: 5px 15px;
          line-height: 26px;

          .bold {
            font-weight: 700;
          }
        }
      }

      .lifeservices {
        border-right: 1px solid #e4e4e4;
        overflow: hidden;
        display: flex;
        flex-wrap: wrap;

        .life-item {
          border-left: 1px solid #e4e4e4;
          border-bottom: 1px solid #e4e4e4;
          margin-right: -1px;
          height: 64px;
          text-align: center;
          position: relative;
          cursor: pointer;
          width: 25%;

          .list-item {
            background-image: url(./images/icons.png);
            width: 61px;
            height: 40px;
            display: block;
          }

          .service-intro {
            line-height: 22px;
            width: 60px;
            display: block;
          }

          &:nth-child(1) {
            .list-item {
              background-position: 0px -5px;
            }
          }

          &:nth-child(2) {
            .list-item {
              background-position: -62px -5px;
            }
          }

          &:nth-child(3) {
            .list-item {
              background-position: -126px -5px;
            }
          }

          &:nth-child(4) {
            .list-item {
              background-position: -190px -5px;
            }
          }

          &:nth-child(5) {
            .list-item {
              background-position: 0px -76px;
            }
          }

          &:nth-child(6) {
            .list-item {
              background-position: -62px -76px;
            }
          }

          &:nth-child(7) {
            .list-item {
              background-position: -126px -76px;
            }
          }

          &:nth-child(8) {
            .list-item {
              background-position: -190px -76px;
            }
          }

          &:nth-child(9) {
            .list-item {
              background-position: 0px -146px;
            }
          }

          &:nth-child(10) {
            .list-item {
              background-position: -62px -146px;
            }
          }

          &:nth-child(11) {
            .list-item {
              background-position: -126px -146px;
            }
          }

          &:nth-child(12) {
            .list-item {
              background-position: -190px -146px;
            }
          }
        }
      }

      .ads {
        margin-top: 5px;

        img {
          opacity: 0.8;
          transition: all 400ms;

          &:hover {
            opacity: 1;
          }
        }
      }
    }
  }
}
</style>